<?php
/*
 install script cakephp-s alkalmazásokhoz
 használatához a /.htaccess filet is módosítani kell
*/
//ini_set('display_errors', false);
if(isset($_GET[mrc])){	//e nélkül a mod_rewrite ellenőrzéskor végtelen rekurzióba futunk
	print OK;
	exit;
	}
require('./app/globals.php');
$hiba = $warn = 0;
define('OK', '<img src="./app/webroot/img/done.png" />');
define('ERROR', '<img src="./app/webroot/img/delete.png" />');
define('WARN', '<img src="./app/webroot/img/overdued.png" />');

define('LANG', 'hu');
//define('LANG', 'en');
if(LANG == 'hu'){
	define('CHANGED', 'módosítva');
	define('CHMOD', 'Kérlek vedd le róla az írási jogot. (chmod 644)');
	define('NOWRITEABLE', 'Nem írható');
	define('CHANGECONTENT', 'Kérlek cseréld a tartalmát erre:');
	define('INSTALLING', 'Installálunk');
	define('T_OK', 'Rendben');
	define('T_ERROR', 'Hiba');
	define('T_WARN', 'Figyelmeztetés');
	define('APPTMP', 'könyvtárnak írhatónak kell lennie');
	define('APPTMP_ERROR', 'A könyvtár <span class="h">nem írható</span>, kérlek tedd írhatóvá!');
	define('APPCONFDB', 'filenak olvashatónak kell lennie');
	define('APPCONFDB_ERROR', 'A file <span class="h">nem olvasható</span>, vagy nem létezik! Hozd létre a /app/config/database.php.default file alapján, vagy tedd olvashatóvá ha már létezik. Ezzel egyidejűleg hozd létre a használni kívánt adatbázist ha még nem tetted.');
	define('SQLCONTRY', 'MySQL csatlakozási kísérlet a <b>/app/config/database.php $default</b> beállításai alapján');
	define('SQLCONERR', ' <span class="h">Nem tudok a MySQL szerverhez csatlakozni</span>: ');
	define('SQLDBERR', ' <span class="h">Nem tudtam hozzáférni az adatbázishoz</span>: ');
	define('VER_PHP', 'PHP verzió');
	define('VER_PHP_ERROR', ' Nem megfelelő a <span class="h">PHP verziószáma</span>. 4.3.2+ szükséges.');
	define('VER_MYSQL', 'MySQL verzió');
	define('VER_MYSQL_ERROR', ' Nem megfelelő a <span class="h">MySQL verziószáma</span>. 4+ szükséges.');
	define('APACHE', 'Webszerver');
	define('APACHE_ERROR', ' Az alkalmazás csak <span class="h">Apache webszerver</span>en volt tesztelve. Más webszerverrel csak saját felelősségre lehet használni. Mondjuk ez az Apache-ra is igaz.');
	define('REWRITE', 'Átirányítás');
	define('REWRITE_WARN', 'Az <span class="f">átirányítás (mod_rewite) nem működik</span>.
						<br /> Kapcsold be a modult, ha ez nem megy, akkor a következőket kell tenned.
						<ul>
						<li>távolítsd el a <b>/.htaccess</b></li>
						<li>a <b>/app/.htaccess</b></li>
						<li>és a <b>/app/webroot/.htaccess</b> fileokat,</li>
						<li>valamint a <b>/app/config/core.php</b> fileban található <b>define (\'BASE_URL\', env(\'SCRIPT_NAME\'));</b> sor elől távolítsd el a \\\\ jelet.</li></ul>');
	define('WRITEABLE', 'Írható');
	define('HTW', '<b>.htaccess</b> fileoknak az installálás idejére <b>írhatónak kell lennie</b>');
	define('DOBYHAND', '<br />Ha nem teszed írhatóvá akkor neked kell kézzel módosítanod<hr />');
	define('BROWSER', 'Böngésző');
	define('BROWSER_ERROR', ' Az alkalmazás <span class="h">Firefox</span>-ra íródott. Elvileg a Mozilla család bármely böngészőjével fut, de csak Firefox alatt lett tesztelve. IE sem most sem a jövőben nem támogatott.');
	define('w2D_UPDATE', 'A what2Do-nak <span class="f">van újabb letölthető</span> változata, javasolt az új változat használata, mely letölthető <a href="http://code.google.com/p/what2do/downloads/list">innen</a>.');
	define('DODBBACKUP', ' adatbázisban már vannak adattáblák és adatok. Ha folytatod és ezek egy előző what2Do táblái, akkor azok <span class="h">törlődni fognak</span>. Szóval csak akkor folytasd, ha biztos vagy a dolgodban és van már backupod.');
	define('VER_RECENT', 'Legfrisebb: ');
	define('VER_INSTALLED', 'Aktuális: ');
	define('FOUNDTABLES', 'Talált adattáblák száma: ');
	define('WARNINGS', 'Figyelmeztetések száma: ');
	define('START_INSTALL', 'Az ellenőrzés <span class="z">nem talált hibát</span>. A telepítés megkezdéséhez <a href="'.$_SERVER['PHP_SELF'].'?lepes=2">katt ide</a>. ');
	define('ERRORZ', ' <span class="h">hibaponttal zárult</span> a telepítési kísérlet. Kérlek próbáld meg újra a hibák javítása után');
	define('DATABASEREADY', ' Adatbázis feltöltve.<br />');
	define('LOGIN', 'BELÉPÉS');
	define('DATABASEERR', 'Az adatbázis részlegesen sikerült csak feltöltenem. A következő parancsokat <span class="h">nem sikerült végrehajtanom</span>.<br />');
	define('SUCCESS', ' Sikeresen feltelepültünk.');
	define('LOGIN1', 'Jelentkezz be a <span class="z">');
	define('LOGIN2', '</span> felhasználónevet és a <span class="z">');
	define('LOGIN3' , '</span> jelszavat használva. Ezt persze ajánlatos idővel megváltoztatni.');
	}
else{
	define('CHANGED', 'changed');
	define('CHMOD', 'Please remove write permission. (chmod 644)');
	define('NOWRITEABLE', 'Not writeable');
	define('CHANGECONTENT', 'Please replace it\'s content for this:');
	define('INSTALLING', 'Installing');
	define('T_OK', 'OK');
	define('T_ERROR', 'Error');
	define('T_WARN', 'Warning');
	define('APPTMP', 'should be writeable');
	define('APPTMP_ERROR', 'The folder <span class="h">not writeable</span>, please change it to writeable!');
	define('APPCONFDB', 'file should be readable');
	define('APPCONFDB_ERROR', 'The file <span class="h">not readabe</span>, or does not exist. Create it based on /app/config/database.php.default , or just make it readable if already exist. Please create the used database also.');
	define('SQLCONTRY', 'MySQL connection probe by the settings of <b>/app/config/database.php $default</b>');
	define('SQLCONERR', ' <span class="h">I can not connect to the MySQL server</span>: ');
	define('SQLDBERR', ' <span class="h">I can not access the database</span>: ');
	define('VER_PHP', 'PHP version');
	define('VER_PHP_ERROR', ' <span class="h">Version of PHP</span>is not acceptable. 4.3.2+ required.');
	define('VER_MYSQL', 'MySQL version');
	define('VER_MYSQL_ERROR', ' <span class="h">Version of MySQL</span>is not acceptable. 4+ required.');
	define('APACHE', 'Webserver');
	define('APACHE_ERROR', ' The application was tested only with <span class="h">Apache webserver</span>');
	define('REWRITE', 'Rewrite');
	define('REWRITE_WARN', '<span class="f">Rewrite (mod_rewite) not working</span>.
						<br /> Switch on the modult. If you can not do it do the following.
						<ul>
						<li>remove <b>/.htaccess</b></li>
						<li><b>/app/.htaccess</b></li>
						<li>and <b>/app/webroot/.htaccess</b> files,</li>
						<li>and in the <b>/app/config/core.php</b> file find line: <b>define (\'BASE_URL\', env(\'SCRIPT_NAME\'));</b> and remove \\\\ sign.</li></ul>');
	define('WRITEABLE', 'Writeable');
	define('HTW', '<b>.htaccess</b> files should be writeable during the installation process</b>');
	define('DOBYHAND', '<br />If you do not make it writeable you should change it by hand<hr />');
	define('BROWSER', 'Browser');
	define('BROWSER_ERROR', ' The application designed for <span class="h">Firefox</span>. Theoretically runs with any of the Mozilla family, but was not tested. There is no support for IE.');
	define('w2D_UPDATE', 'what2Do has a <span class="f">new</span> version. Please download the new version from <a href="http://code.google.com/p/what2do/downloads/list">here</a>.');
	define('DODBBACKUP', ' database has data tables and datas. If you continue and the tables are from a previous what2Do installation they <span class="h">will be deleted</span>. Please make your backup, before move on.');
	define('VER_RECENT', 'Most recent: ');
	define('VER_INSTALLED', 'Actual: ');
	define('FOUNDTABLES', 'Found data tables: ');
	define('WARNINGS', 'Warnings: ');
	define('START_INSTALL', 'The check <span class="z">did not find any errors</span>. <a href="'.$_SERVER['PHP_SELF'].'?lepes=2">Start install</a> here. ');
	define('ERRORZ', ' <span class="h">errors.</span>Please try again after solving all the problems.');
	define('DATABASEREADY', ' Database ready<br />');
	define('LOGIN', 'LOGIN');
	define('DATABASEERR', 'The databsed just partially filled with the datas. These queries <span class="h">did not commited</span>.<br />');
	define('SUCCESS', ' Installation finished with success.');
	define('LOGIN1', 'Please log in as user: <span class="z">');
	define('LOGIN2', '</span> and with password: <span class="z">');
	define('LOGIN3' , '</span> Please change these in time.');
	}

function getInSql(){
	//sql csatlakozási adatok lekérése és visszaadása
	$d = file_get_contents('./app/config/database.php');
	preg_match_all("/'host' => '(.*)'/", $d, $t);
	$host = $t[1][0];
	preg_match_all("/'login' => '(.*)'/", $d, $t);
	$login = $t[1][0];
	preg_match_all("/'password' => '(.*)'/", $d, $t);
	$password = $t[1][0];
	preg_match_all("/'database' => '(.*)'/", $d, $t);
	$database = $t[1][0];
	preg_match_all("/'prefix' => '(.*)'/", $d, $t);
	$prefix = $t[1][0];
	return(array(
		'host'=>$host,
		'login'=>$login,
		'password'=>$password,
		'database'=>$database,
		'prefix'=>$prefix));
	}
	
function tryToWrite($htaccFile, $htacc){
	//file-ba írási kísérlet
	if(is_writeable($htaccFile)){
		//fileba írás
		$fp = fopen($htaccFile, 'w');
		fwrite($fp, $htacc);
		fclose($fp);
		print OK . ' '. str_replace('./', '/', $htaccFile) . ' ' . CHANGED . '. ' . CHMOD . '<br />';
		}
	else{
		print WARN .  ' '. str_replace('./', '/', $htaccFile) . ' ' . NOWRITEABLE . ' ' . CHANGECONTENT . '<br />
		<pre>'.
		$htacc
		.'
		</pre>';
		}

	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>What2Do</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="./app/webroot/css/what2Do.css" />
<style type="text/css">
a{color: #55f;font-weight:bold;}
table{margin-left:1em;}
.h{color:red;font-weight:bold;}
td{border-bottom:1px solid gray;}
.f{color:blue;}
.z{color:green;font-weight:bold;}
</style>
</head>
<body>
<div id="teljeslap">
	<div id="fejlec">
	</div>

	<div id="tartalom">
		<h1 style="margin-top: 2.5em;"><?php print INSTALLING; ?></h1>
<?php
print '<div id="tasklist">';
print OK . ' ' . T_OK . '<br />';
print ERROR . ' '. T_ERROR . '<br />';
print WARN . ' ' . T_WARN . '<br />';
print '</div>';

if($_GET['lepes'] != 2){
?>
		<div id="whatsnext">
		<table>
			<tr><td>
				<b>/app/tmp/</b> <?php print APPTMP; ?>
			</td>
			<td>
				<?php
					if(is_writeable('./app/tmp/'))
						print OK;
					else{
						print ERROR . ' ' . APPTMP_ERROR;
						$hiba++;
						}
				?>
			</td><td></td></tr>
			<tr><td>
				<b>/app/config/database.php</b> <?php print APPCONFDB; ?>
			</td>
			<td>
				<?php
					if(is_readable('./app/config/database.php'))
						print OK;
					else{
						print ERROR . ' ' . APPCONFDB_ERROR;
						$hiba++;
						}
				?>
			</td><td></td></tr>
			<tr><td>
				<?php print SQLCONTRY; ?>
			</td>
			<td>
				<?php
					$sql = getInSql();
					
					$h = false;
					$link = mysql_connect($sql['host'], $sql['login'], $sql['password']);
					if(!$link){
						print ERROR . ' ' . SQLCONERR . mysql_error() . '<br />';
						$h = true;
						$hiba++;
						}

					$db_selected = mysql_select_db($sql['database'], $link);
					if(!$db_selected){
						print ERROR . ' ' . SQLDBERR . ': ' . $sql['database'] . mysql_error();
						$h = true;
						$hiba++;
						}
					
					if(!$h)
						print OK;
				?>
			</td><td></td></tr>
			<tr>
				<td><?php print VER_PHP; ?></td>
				<td><?php
					$phpversion = phpversion();
					//4.3.2 vagy fölötte
					$v = str_replace('.', '', substr($phpversion, 0, 5));
					if($v>='432')
						print OK;
					else{
						print ERROR . ' ' . VER_PHP_ERROR;
						$hiba++;
						}
					?></td>
				<td><?php print $phpversion; ?></td>
			</tr>
			<tr>
				<td><?php print VER_MYSQL; ?></td>
				<td>
					<?php
					$mysqlversion = mysql_get_server_info();
					$v = str_replace('.', '', substr($mysqlversion, 0, 3));
					if($v>='40')
						print OK;
					else{
						print ERROR . ' ' . VER_MYSQL_ERROR;
						$hiba++;
						}
					?>
				</td>
				<td><?php print $mysqlversion; ?></td>
				</tr>
			<tr>
				<td><?php print APACHE; ?></td>
				<td>
					<?php
					$webserver = $_SERVER['SERVER_SOFTWARE'];
					if(stripos($webserver, 'apache')!==false)
						print OK;
					else{
						print ERROR . ' ' . APACHE_ERROR;
						$hiba++;
						}
					?>
				</td>
				<td><?php print $webserver; ?></td>
			</tr>
			<tr>
				<td><?php print REWRITE; ?></td>
				<td>
					<?php
					$response_code = get_headers('http://' . $_SERVER['HTTP_HOST'] . str_replace('install.php', 'mod_rewrite_check', $_SERVER['PHP_SELF']));
					if(strpos($response_code[0], '200 OK') || strpos($response_code[0], '302 Found'))
						print OK;
					else{
						print WARN . ' ' . REWRITE_WARN . $response_code[0];
						$warn++;
						}
					?>
				</td>
				<td></td>
			</tr>
			<tr>
				<td><?php print HTW; ?></td>
				<td>
					<?php
					if(is_writeable('./.htaccess'))
						print OK . ' /.htaccess ' . WRITEABLE . '<hr />';
					else{
						print WARN . '<span class="f">./.htaccess ' . NOWRITEABLE . '</span>' . DOBYHAND;
						$warn++;
						}
					if(is_writeable('./app/.htaccess'))
						print OK . ' /app/.htaccess ' . WRITEABLE . '<hr />';
					else{
						print WARN . '<span class="f">./app/.htaccess ' . NOWRITEABLE . '</span>' . DOBYHAND;
						$warn++;
						}
					if(is_writeable('./app/webroot/.htaccess'))
						print OK . ' /app/webroot/.htaccess ' . WRITEABLE;
					else{
						print WARN . '<span class="f">./app/webroot/.htaccess ' . NOWRITEABLE . '</span>' . DOBYHAND;
						$warn++;
						}
					?>
				</td>
				<td></td>
			</tr>
			<tr>
				<td><?php print BROWSER; ?></td>
				<td>
					<?php
					$browser = $_SERVER['HTTP_USER_AGENT'];
					if(stripos($browser, 'firefox')!==false)
						print OK;
					else{
						print ERROR . ' ' . BROWSER_ERROR;
						$hiba++;
						}
					?>
				</td>
				<td><?php print $browser; ?></td>
			</tr>
			<tr>
				<td>what2Do verzió</td>
				<td>
					<?php
					$w2dver['actual'] = file_get_contents('version-info');
					$w2dver['recent'] = file_get_contents('http://webmania.cc/w2d/version-info');
					if($w2dver['actual'] == $w2dver['recent'])
						print OK;
					else{
						print WARN . ' '. W2D_UPDATE;
						$warn++;
						}
					?>
				</td>
				<td><?php print VER_RECENT . $w2dver['recent'] . '<br /> '. VER_INSTALLED . $w2dver['actual']; ?></td>
			</tr>
			<tr>
				<td>Létező adatbázis</td>
				<td>
					<?php
					$s = 0;
					$t = mysql_list_tables($sql['database']);
					while($tt = mysql_fetch_array($t)){
						$s++;
						}
					if(!$s)
						print OK;
					else{
						print WARN . ' <span class="f">' . $sql['database'] . '</span>'.  DODBBACKUP;
						$warn++;
						}
					?>
				</td>
				<td>
				<?php
				if($s)
					print FOUNDTABLES . $s;
				?></td>
			</tr>
		</table>
		</div>
<?php
if(!$hiba){
	if($warn)
		print '<h3>' . WARNINGS . $warn . '</h3>';
	print '<h2>' . START_INSTALL . '</h2>';
}
else{
	if($warn)
		print WARNINGS . $warn;
	print  $hiba . ' '. ERRORZ;
	}
}
else{
//ha nincs hiba akkor elkezdődhet a tényleges install folyamat
	print '<div style="margin:1em 3em;">';
	//htaccess fileok módosítása
	$htaccFiles = array('./.htaccess', './app/.htaccess', './app/webroot/.htaccess');
	foreach($htaccFiles as $htaccFile){
		$htacc = file_get_contents($htaccFile);
		if(preg_match('%(/[^/]+/)+install.php%', $_SERVER['PHP_SELF'])){
			//ha valami alkönyvtárba települünk, akor kell a rewritebase egyébként nem
			$htacc = preg_replace('/#*RewriteBase .*/', 'RewriteBase ' . str_replace('install.php', '', $_SERVER['PHP_SELF']), $htacc);
			tryToWrite($htaccFile, $htacc);
			}
		else{
			//nem kellenek a rewritebase-k nem alkönyvtárban vagyunk
			$htacc = str_replace('RewriteBase', '#RewriteBase', $htacc);
			tryToWrite($htaccFile, $htacc);
			}
		}
	//sql kapcsolat
	$sql = getInSql();
	$link = mysql_connect($sql['host'], $sql['login'], $sql['password']);
	$db_selected = mysql_select_db($sql['database'], $link);
	//karakterkódolás
	mysql_query("SET NAMES 'utf8'");

	//toljuk be a mysql-be az induló állapotot
	$sqlfile = file_get_contents('what2Do-ures.sql');
	$l = '';
	preg_match_all('/[^;]*/m', $sqlfile, $sqlp);
	
	$mintak = array(
		'/DROP TABLE IF EXISTS `([^`]*)`/',
		'/CREATE TABLE `([^`]*)`/',
		'/INSERT INTO `([^`]*)`/'
		);
	$csere = array(
		'DROP TABLE IF EXISTS `'.$sql['prefix'].'$1`',
		'CREATE TABLE `'.$sql['prefix'].'$1`',
		'INSERT INTO `'.$sql['prefix'].'$1`',
		);

	$s = 0;
	$hibasSql = array();
	foreach($sqlp[0] as $p){
		if($p){
			//ha definiált a prefix akkor azt hozzá kell fűzni
			if($sql['prefix']){
				$p = preg_replace($mintak, $csere, $p);
				}
			if(mysql_query($p))
				$sqlok++;
			else
				$hibasSql[] = $p;
			//print $p . '<hr />';
			if(stripos($p, 'users'))
				$l = $p;
			$s++;
			}
		}
	if($sqlok == $s-1){
		print OK . DATABASEREADY . '<br />';

		//ha sikeres írjuk ki az alapértelmezett felhasználónevet és jelszót a fileból kiszedve
		preg_match_all("/'[^']*'/", $l, $t);
		print OK . ' ' . SUCCESS . ' ' . LOGIN1 . $t[0][0] . LOGIN2 . $t[0][1] . LOGIN3;
		//irányítsuk rá a bejelenkező oldalra
		print '
			<div style="margin:2em auto;width:30%;background-color:#a66;-moz-border-radius:5px;font-size:2em;padding:1em;text-align:center;">
			<a href="tasks" style="color:#ffc;">' . LOGIN . '</a>
		</div>
		';
		}
	else{
		print ERROR . DATABASEERR;
		foreach($hibasSql as $h){
			print $h . '<hr />';
			}
		}
}
?>
	</div>
	<div id="lablec">
	</div>
</div>
</body>
</html>